package com.tjetc._4abstarct;

import java.util.ArrayList;

public class _1Abstract {
    public static void main(String[] args) {
        /*
            抽象类： 相当于类的抽象
            动物在生活中不存在，我们能看到的是 一只🐶， 一只🐱
            意味着动物这个对象 应该不存在 没有这个对象 能new吗？抽象类 能创建对象么？

            抽象类的作用？抽象类核心就是用来被继承的

            一个动物是🐱 ： 多态

            特点：
                1.抽象类不能被实例化
                2.抽象方法没有具体的方法体，如果子类继承需要实现抽象方法

         */

//        Animal animal = new Animal();
//        animal.setName("张三");
//        animal.setAge(1);
//        animal.eat();

        Animal dog = new Dog();
        dog.setName("lisi");
        dog.setAge(1);
        dog.eat();

        Animal cat = new Cat();
        cat.setName("🐱");
        cat.setAge(2);
        cat.eat();
    }
}

// 使用abstract 修饰类 不能被实例化
abstract class Animal {
    private String name;
    private int age;

    // 行为也需要抽象
//    public void eat() {
//        System.out.println(name + "吃");
//    }

    // 抽象方法不能有方法体
    public abstract void eat();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

class Dog extends Animal {

    @Override
    public void eat() {
        System.out.println("疯狂吃");
    }
}


class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("温柔吃");
    }
}